#ifndef __DLIST_H__
#define __DLIST_H__

typedef struct node
{
	void *data; // 数据指针
	struct node *pre; // 指向前面的节点
	struct node *next; // 指向后面的节点
} node_t;

// [链表的增、删、改、查、排序、遍历操作]
// 创建链表头
node_t *create_dlist();
// 判断链表是否为空
int is_empty_dlist(node_t *head);
// 从头部插入数据
int insert_hdlist(node_t *head, void *data, int len);
// 从尾部插入数据
int insert_tdlist(node_t *head, void *data, int len);
// 显示
typedef void (*pfunc_show_t)(void *data);
void show_dlist(node_t *head, pfunc_show_t show_func);
// 从头部删除
int delete_hdlist(node_t *head);
// 从尾部删除
int delete_tdlist(node_t *head);
// 销毁
int destroy_dlist(node_t **head);
// 修改
int modify_dlist(node_t *head, void *old_data, void *new_data, int len);
// 查找
typedef int (*pfunc_cmp_t)(void *data1, void *data2);
node_t *find_dlist(node_t *head, void *data, pfunc_cmp_t cmp_func);

#endif
